home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Source / GNU / cc / va-pa.h < prev    next >
C/C++ Source or Header  |  1993-11-09  |  1KB  |  51 lines

  1.  
  2. /* Define __gnuc_va_list. */
  3.  
  4. #ifndef __GNUC_VA_LIST
  5. #define __GNUC_VA_LIST
  6.  
  7. #ifdef NeXT
  8. #define _ANSI_STDARG_H_
  9. #endif
  10.  
  11. typedef double *__gnuc_va_list;
  12. #endif /* not __GNUC_VA_LIST */
  13.  
  14. /* If this is for internal libc use, don't define anything but
  15.    __gnuc_va_list.  */
  16. #if defined (_STDARG_H) || defined (_VARARGS_H)
  17. #if __GNUC__ > 1
  18. #define __va_ellipsis ...
  19. #define __gnuc_va_start(AP) ((AP) = (va_list)__builtin_saveregs())
  20. #else
  21. #define va_alist __va_a__, __va_b__, __va_c__, __va_d__
  22. #define __va_ellipsis 
  23. #define __gnuc_va_start(AP)\
  24.   (AP) = (double *) &__va_a__, &__va_b__, &__va_c__, &__va_d__, \
  25.   (AP) = (double *)((char *)(AP) + 4)
  26. #endif /* __GNUC__ > 1 */
  27.  
  28. #ifdef _STDARG_H
  29. #define va_start(AP,LASTARG) __gnuc_va_start (AP)
  30. #else
  31. /* The ... causes current_function_varargs to be set in cc1.  */
  32. #define va_dcl long va_alist; __va_ellipsis
  33. #define va_start(AP) __gnuc_va_start (AP)
  34. #endif
  35.  
  36. #define va_arg(AP,TYPE)                        \
  37.   (sizeof(TYPE) > 8 ?                        \
  38.    ((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))),    \
  39.     (*((TYPE *) (void *) (*((int *) (AP))))))            \
  40.    :((AP =                            \
  41.       (__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE))    \
  42.             & (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))),    \
  43.      (*((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4))))))
  44.  
  45. #ifndef va_end
  46. void va_end (__gnuc_va_list);        /* Defined in libgcc.a */
  47. #endif
  48. #define va_end(AP)
  49.  
  50. #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
  51.